package br.com.esporte.apresentacao.infra.componente.itemPresencaDiaPartida;

import java.util.Arrays;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
import org.apache.wicket.behavior.SimpleAttributeModifier;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.resource.PackageResourceReference;

import br.com.esporte.apresentacao.grupoEsporteGrupo.IPaginaPresenca;
import br.com.esporte.apresentacao.infra.componente.ComponenteGenerico;
import br.com.esporte.apresentacao.util.Constantes;
import br.com.esporte.negocios.entidade.imp.PresencaDiaPraticado;
import br.com.esporte.negocios.entidade.imp.Usuario;
import br.com.esporte.negocios.entidade.util.StatusPresencaEnum;

/**
 * 
 * @author Milton Domingues
 *
 */
public class ItemPresencaDiaPartida extends ComponenteGenerico  {

	private static final long serialVersionUID = -8669463744759479568L;

	private PresencaDiaPraticado presenca;

	private Usuario usuarioLogado;

	private IPaginaPresenca pagina;

	public ItemPresencaDiaPartida(String id, PresencaDiaPraticado presenca, Usuario usuario, IPaginaPresenca pagina) {
		super(id);
		this.setPagina(pagina);
		this.setUsuarioLogado(usuario);
		this.setPresenca(presenca);
		this.montarComponente();
	}

	private AjaxSubmitLink criarBtAtualizar(){
		AjaxSubmitLink link = new AjaxSubmitLink("btAtualizar") {

			private static final long serialVersionUID = 1L;

			@Override
			protected void onError(AjaxRequestTarget target, Form<?> form) {

			}

			@Override
			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
				ItemPresencaDiaPartida.this.getPresenca().setStatus(ItemPresencaDiaPartida.this.getDrop().getModelObject());
				ItemPresencaDiaPartida.this.getPagina().acaoAtualizarStatus(ItemPresencaDiaPartida.this.getPresenca());
			}
		};

		link.setVisible(this.update());

		return link;
	}

	private DropDownChoice<StatusPresencaEnum> criarDropStatus(){
		ChoiceRenderer<StatusPresencaEnum> choice = new ChoiceRenderer<StatusPresencaEnum>("descricao");
		DropDownChoice<StatusPresencaEnum> drop = new DropDownChoice<StatusPresencaEnum>("status", new Model<StatusPresencaEnum>(this.getPresenca().getStatus()), Arrays.asList(StatusPresencaEnum.values()), choice);
		drop.setEnabled(this.update());
		return drop;
	}

	private Image criarImagemUsuario(){
		Image usuarioImg = new Image("usuarioImg", "");
		usuarioImg.add(new SimpleAttributeModifier("src", this.getImagemUsuario(this.getPresenca().getUsuario()).getName()));
		return usuarioImg;
	}

	@SuppressWarnings("unchecked")
	private DropDownChoice<StatusPresencaEnum> getDrop(){
		return (DropDownChoice<StatusPresencaEnum>) this.get("status");
	}

	public PackageResourceReference getImagemUsuario(Usuario usuario) {
		return new PackageResourceReference(Constantes.CAMINHO_IMAGEM_PERFIL + usuario.getImagem());
	}

	public IPaginaPresenca getPagina() {
		return this.pagina;
	}

	public PresencaDiaPraticado getPresenca() {
		return this.presenca;
	}

	public Usuario getUsuarioLogado() {
		return this.usuarioLogado;
	}

	@Override
	public void montarComponente() {
		this.add(this.criarImagemUsuario());
		this.add(new Label("nome", getPresenca().getUsuario().getNome()));
		this.add(this.criarDropStatus());
		this.add(this.criarBtAtualizar());
	}

	public void setPagina(IPaginaPresenca pagina) {
		this.pagina = pagina;
	}

	public void setPresenca(PresencaDiaPraticado presenca) {
		this.presenca = presenca;
	}

	public void setUsuarioLogado(Usuario usuarioLogado) {
		this.usuarioLogado = usuarioLogado;
	}

	private boolean update(){
		if(this.getPresenca().getUsuario().equals(this.getUsuarioLogado())){
			return true;
		}else{
			return false;
		}
	}

}